eMMC启动配置

之前我们使用的都是TF卡启动,对应的硬件接口是SD0。现在要更改启动方式,从eMMC启动系统,就要在之前的配置上做一些更改:

修改vivado配置

在vivado的block design中需使能SD1(eMMC在核心板上挂载在SD1接口上):

image-20250723112004925

继续后续的操作:“Generate Bitstream"-->Export Hardware"--->导出.xsa文件。

更改petalinux相关配置

image-20250723113840031

对qspi-flash进行分区:

image-20250723121624296

image-20250723120256821

image-20250723114031252

QSPI-Flash加载uboot和image,eMMC加载rootfs

(1)烧写BOOT.bin:image file选择BOOT.bin,offset填0x0000000

(2)烧写image.ub:先把image.ub改名成image.ub.bin;然后image file选择image.ub.bin,offeset填0x5A0000

(3)烧写boot.src:先把boot.src改名成boot.src.bin;然后image file选择boot.src.bin,offeset填0xFE0000:

uboot启动后,会去加载boot.src脚本,在该脚本中会根据当前的启动模式,进行相应的读取和加载以及bootm。

image-20250725173954062

boot.src文件分析

uboot启动后,会去加载boot.src脚本,在该脚本中会根据当前的启动模式,进行相应的读取和加载以及bootm。

以下是默认的boot.src文件的内容

如果boot mode是qspi,那么uboot和image都会从qspi flash加载。

如果boot mode是mmc0或者mmc1,则uboot和image都会从mmc加载。

QSPI-Flash加载uboot, eMMC加载image和rootfs

根据前面对boot.src文件的分析,如果想从qspi flash加载uboot,从mmc加载image,那么就需要修改boot.src文件。

因为boot.src文件本身是带crc校验的,所以直接修改boot.src内容,会导致boot.src校验失败,从而无法启动内核。

boot.src是通过components/yocto/layers/meta-xilinx/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.generic为模板而生成的,所以可以修改boot.cmd.generic文件。

但是boot.cmd.generic文件在petalinux-config时可能会被自动覆盖。

合理的修改办法是通过在project-spec/meta-user/recipes-bsp/uboot/的增加一个u-boot-zynq-scr.bbappend和一个u-boot-zynq-scr文件夹来解决。

Patching U-Boot boot script in Petalinux 2021.1

image-20250725174553471

components/yocto/layers/meta-xilinx/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.generic文件拷贝到u-boot-zynq-scr文件夹下,然后修改该文件: